#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef int dataType;

typedef struct node {
    dataType data;
    struct node * next;
}linknode;

// 链式队列 插入操作在队尾进行，删除操作在队头进行， 
// 队列结构 有两个node指针
typedef struct {
    linknode *front;
    linknode * rear;
}linkqueue;

// 创建空链队
linkqueue * create_empty_queue() {
    linkqueue *q = (linkqueue *) malloc(sizeof(linkqueue));
    memset(q, 0 , sizeof(linkqueue));

    linknode *head  = (linknode *) malloc(sizeof(linknode));
    head->next = NULL;

    q->front = q->rear = head;
    return q;
}

// 判断链队是否为空
int is_empty_queue(linkqueue * q) {
    return q->front = q->rear;
}

// 入队
void enter_linkqueue(linkqueue * q, dataType data) {
    linknode *temp = (linknode *) malloc(sizeof(linknode));
    temp->data = data;
    temp->next = q->rear->next;
    q->rear->next = temp;
    q->rear = temp;
}

// 出队
dataType delete_linkqueue(linkqueue *q) {
    dataType data;

    linknode *temp = q->front->next;
    data = temp->data;
    q->front->next = temp->next;
    free(temp);
    if (q->front->next == NULL) {
        q->rear = q->front;
    }
    return data;
}

int main(int argc, char const *argv[])
{
    /* code */
    return 0;
}
